# 导包
#Pytest 框架
import pytest
#
import allure
# 引入自动化工具 用于创建浏览器驱动对象，从而针对web软件进行测试
from selenium import webdriver
# 引入 页面元素选择工具 只有选择上了才能对其进行操作
from selenium.webdriver.common.by import By
# 引入时间歌工具
import time
# 导入鼠标操作工具包
from selenium.webdriver.common.action_chains import ActionChains
# 导包键盘操作包：
from selenium.webdriver.common.keys import Keys
# 导入元素显示等待工具包
from selenium.webdriver.support.wait import WebDriverWait

# 将项目测试代码，修改为pytest框架所需的格式，通过 allure_pytest.py 输出测试报告

class Test_Easebuy:
    # 开始测试
    # 前置通知
    def setup_class(self):
        # 创建浏览器驱动对象，启动项目
        self.driver = webdriver.Chrome();
        self.driver.get("http://localhost:8080/EasyBuy/Home?action=index")
        # 窗口最大化
        self.driver.maximize_window()
        # 全局元素默认等待3秒
        self.driver.implicitly_wait(3)

    # 后置通知
    def teardown_class(self):
        # 停留三秒 关闭驱动（关掉所有项目）
        time.sleep(3)
        self.driver.quit();

    def test_login(self):
        driver = self.driver;  # 通过self将创建的driver对象 供其他方法使用
        # 暂停3秒
        time.sleep(2)
        # 捕获元素。进行操作
        driver.find_element(By.LINK_TEXT, "登录").click();  # 跳转登录界面
        driver.find_element(By.CSS_SELECTOR, "#loginName").send_keys("admin");  # 账号
        driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456");  # 密码
        time.sleep(2)
        driver.find_element(By.CSS_SELECTOR, ".log_btn").click();  # 确认登录
        time.sleep(2)

        assert True  # 登录成功断言

    def test_Shopping(self):
        driver=self.driver;
        # 物品购买
        driver.find_element(By.LINK_TEXT, "化妆品").click();  # 跳转 化妆品 类 购买旗下物品
        # 下拉滚动条
        time.sleep(2)
        xla = "window.scrollTo(0,300)"  # X轴 ，Y轴
        # 执行滚动条拉到中层操作
        driver.execute_script(xla)

        # 主窗口
        index = driver.current_window_handle;

        # 将香奈儿 加入购物车
        time.sleep(2)
        driver.find_element(By.CSS_SELECTOR, ".cate_list li .img").click();  # 此时打开了新窗口，所需要 多窗口工具的使用
        # 获取所有窗口与主窗口不对，不是主窗口就是现在打开的新窗口 （因为我们只打开了除了 index 窗口的 香奈儿 购买窗口）
        hand = driver.window_handles;
        for i in hand:
            if i != index:
                driver.switch_to.window(i);  # 切换 香奈儿 购买窗口
                # # 下拉滚动条
                time.sleep(2)
                xla2 = "window.scrollTo(0,150)"  # X轴 ，Y轴
                # 执行滚动条拉到加入购物车 选项位置
                driver.execute_script(xla2);
                time.sleep(3)  # 等待元素加载
                break
        # 单击 购物车 选项
        driver.find_element(By.CSS_SELECTOR, ".des_join > span").click();
        # 叉掉 加入成功 提示
        time.sleep(3)  # 等待元素加载
        driver.find_element(By.CSS_SELECTOR, "#MyDiv1>.white_d>.notice_t>span").click();
        # 返回主页 查看效果 menu_bg
        time.sleep(1)  # 等待元素加载
        # # 当前 商品详细信息 窗口    没有重新打开新窗口 所以不需要使用多窗口 工具
        # xnaie=driver.current_window_handle;
        # 返回首页
        driver.find_element(By.LINK_TEXT, "首页").click();

        # # 鼠标悬浮 主页右侧 购物车图标 查看结果
        action = ActionChains(driver);  # 创建鼠标操作对象
        action.move_to_element(driver.find_element(By.CSS_SELECTOR, ".top>.i_car")).perform();
        assert True  # 用例成功断言


# 启动  Test_EasyBuy.py文件中  编写的 测试TestEaseBuy项目的测试类 test01
if __name__ == '__main__':
    pytest.main(["-s","Test_EasyBuy.py"]);